package org.example.shoppingsystem.controller;
import org.example.shoppingsystem.model.User;
import org.example.shoppingsystem.service.UserService;
import org.example.shoppingsystem.service.UserServiceImpl;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.sql.SQLException;
@Controller
public class LoginController {
    // 创建 UserService 实例，用于处理用户登录的业务逻辑
    private UserService userService = new UserServiceImpl();

    /**
     * 处理 GET 请求，显示登录页面。
     * @return 登录页面的视图名称
     */
    @GetMapping("/login03")
    public String showLoginPage() {
        return "login";
    }

    /**
     * 处理 POST 请求，处理用户登录逻辑。
     * @param account 用户输入的账号
     * @param pass 用户输入的密码
     * @param model 用于向视图传递数据的模型对象
     * @param request HttpServletRequest 对象，用于获取 HttpSession
     * @return 登录成功返回欢迎页面，失败返回登录页面
     */
    @PostMapping("/login03")
    public String login(@RequestParam("account") String account, @RequestParam("pass") String pass, Model model, HttpServletRequest request) {
        String errMsg = "";
        try {
            // 调用 UserService 的 login 方法进行登录验证
            if (userService.login(account, pass)) {
                // 根据账号查询用户信息
                User user = userService.findUserByAccount(account);
                // 获取 HttpSession 对象，若不存在则创建一个新的
                HttpSession session = request.getSession(true);
                // 将用户名存储在 session 中
                session.setAttribute("name", user.getUsername());
                // 登录成功，跳转到欢迎页面
                return "welcome";
            } else {
                errMsg += "您的账号密码不符合，请重新输入";
            }
        } catch (SQLException e) {
            errMsg += "数据库操作出错，请稍后再试。";
            e.printStackTrace();
        }

        if (!errMsg.isEmpty()) {
            model.addAttribute("err", errMsg);
            // 登录失败，返回登录页面
            return "login";
        }
        return "login";
    }
}